JAMstack ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ(SSG)๋ฅผ ํตํฉํ์ฌ ์ฑ๋ฅ, ๋ณด์, ํ์ฅ์ฑ์ ๊ฐ์ ํ๋ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
ํ๋ก ํธ์๋ JAMstack ์ํคํ ์ฒ: ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ ํตํฉ ๋ง์คํฐํ๊ธฐ
JAMstack(JavaScript, API, Markup) ์ํคํ ์ฒ๋ ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ์ ํ๋ช ์ ์ผ์ผํค๋ฉฐ ์ฑ๋ฅ, ๋ณด์, ํ์ฅ์ฑ ๋ฐ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค. ๋ง์ JAMstack ๊ตฌํ์ ํต์ฌ์๋ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ(SSG)๊ฐ ์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ ์ฌ๋ฐ๋ฅธ SSG ์ ํ๋ถํฐ ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ ๊น์ง ๋ชจ๋ ๊ฒ์ ๋ค๋ฃจ๋ฉฐ, JAMstack ์ํคํ ์ฒ์ SSG๋ฅผ ํตํฉํ๋ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
JAMstack์ด๋ ๋ฌด์์ธ๊ฐ?
JAMstack์ ํน์ ๊ธฐ์ ์ด ์๋๋ผ, ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)๋ฅผ ํตํด ์ ๊ณต๋๋ ์ฌ์ ๋ ๋๋ง๋ ์ ์ ๋งํฌ์ ์ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ ์ ๋ ์ํคํ ์ฒ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๋์ ์ธ ๋ถ๋ถ์ JavaScript๊ฐ ์ฒ๋ฆฌํ๋ฉฐ, ์๋ฒ ์ธก ๊ธฐ๋ฅ์ API์ ์ํธ ์์ฉํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฑ๋ฅ: ์ ์ ์์ฐ์ CDN์์ ์ง์ ์ ๊ณต๋๋ฏ๋ก ๋ก๋ฉ ์๊ฐ์ด ๋๋ผ์ธ ์ ๋๋ก ๋น ๋ฆ ๋๋ค.
- ๋ณด์: ์ฌ์ฉ์ ์์ฒญ์ ์ง์ ์ฒ๋ฆฌํ๋ ์๋ฒ ์ธก ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฏ๋ก ๊ณต๊ฒฉ ํ๋ฉด์ ์ด ์ค์ด๋ญ๋๋ค.
- ํ์ฅ์ฑ: CDN์ ์ฑ๋ฅ ์ ํ ์์ด ๋๊ท๋ชจ ํธ๋ํฝ ๊ธ์ฆ์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๊ฐ๋ฐ์ ๊ฒฝํ: ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๊ฐ ๋จ์ํ๋๊ณ ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ๋น์ฉ ํจ์จ์ฑ: ์๋ฒ ์ธํ๋ผ ์๊ตฌ ์ฌํญ์ด ์ค์ด๋ค์ด ์๋นํ ๋น์ฉ ์ ๊ฐ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ(SSG)์ ์ญํ
์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ๋ ๋งํฌ๋ค์ด, YAML ๋๋ JSON๊ณผ ๊ฐ์ ์์ค ํ์ผ๊ณผ ํ ํ๋ฆฟ์ ๊ฒฐํฉํ์ฌ ์ ์ HTML, CSS ๋ฐ JavaScript ํ์ผ์ ์์ฑํ๋ ๋๊ตฌ์ ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋น๋ ๋จ๊ณ์์ ๋ฐ์ํ๋ฉฐ, ์ด๋ ์น์ฌ์ดํธ๊ฐ ์ฌ์ ๋ ๋๋ง๋์ด CDN์์ ์ง์ ์ ๊ณต๋ ์ค๋น๊ฐ ๋์์์ ์๋ฏธํฉ๋๋ค. ์ด ์ฌ์ ๋ ๋๋ง์ JAMstack ์ฌ์ดํธ์ ํ์ํ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ํต์ฌ ์์์ ๋๋ค.
SSG๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ๊ธฐ์กด์ ์๋ฒ ์ธก ๋ ๋๋ง์ ๋ณต์ก์ฑ ์์ด ์ต์ ํ ํ๋ฆฟ ์ธ์ด, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ ๋ฐ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฒ ๊ด๋ฆฌ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ ์์ฉ์ ์ถ์ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ API์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ ์ ํํ๊ธฐ
SSG์ ํ๊ฒฝ์ ๋ค์ํ๋ฉฐ ์๋ง์ ์ต์ ์ด ์์ผ๋ฉฐ ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ํ๋ก์ ํธ์ ์ ํฉํ SSG๋ฅผ ์ ํํ๋ ๊ฒ์ ์ฌ๋ฌ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค:
- ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ: ํ๋ก์ ํธ์ ๋ณต์ก์ฑ, ๊ด๋ฆฌํ๋ ์ฝํ ์ธ ์ ํ ๋ฐ ํ์ํ ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ญ์์ค.
- ๊ธฐ์ ์คํ: ๊ธฐ์กด ๊ธฐ์ ์คํ๊ณผ ํ์ ์ ๋ฌธ ์ง์์ ๋ง๋ SSG๋ฅผ ์ ํํ์ญ์์ค.
- ์ปค๋ฎค๋ํฐ ๋ฐ ์ํ๊ณ: ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ์ ํ๋ถํ ํ๋ฌ๊ทธ์ธ ๋ฐ ํ ๋ง ์ํ๊ณ๋ ๊ฐ๋ฐ์ ํฌ๊ฒ ๊ฐ์ํํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ๋ฐ ํ์ฅ์ฑ: SSG์ ์ฑ๋ฅ ํน์ฑ๊ณผ ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฅ๋ ฅ์ ํ๊ฐํ์ญ์์ค.
- ์ฌ์ฉ ํธ์์ฑ: ํ์ต ๊ณก์ ๊ณผ ์ ๋ฐ์ ์ธ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๊ณ ๋ คํ์ญ์์ค.
์ธ๊ธฐ ์๋ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ
- Gatsby: ์ฑ๋ฅ ์ต์ ํ์ ํ๋ถํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ก ์ ๋ช
ํ React ๊ธฐ๋ฐ SSG์
๋๋ค. Gatsby๋ ํนํ ์ฝํ
์ธ ๊ฐ ํ๋ถํ ์น์ฌ์ดํธ ๋ฐ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์ ํฉํฉ๋๋ค.
- ์ฅ์ : ๋ฐ์ด๋ ์ฑ๋ฅ, GraphQL ๋ฐ์ดํฐ ๋ ์ด์ด, ํ๋ถํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ, React ๊ฐ๋ฐ์์๊ฒ ์ ํฉ.
- ๋จ์ : ๊ตฌ์ฑ์ด ๋ณต์กํ ์ ์์ผ๋ฉฐ, ๋๊ท๋ชจ ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
- Next.js: ์๋ฒ ์ธก ๋ ๋๋ง(SSR)๊ณผ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)์ ๋ชจ๋ ์ง์ํ๋ React ํ๋ ์์ํฌ์
๋๋ค. Next.js๋ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ถ์ ์ํ ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ ์๋ฃจ์
์ ์ ๊ณตํฉ๋๋ค.
- ์ฅ์ : ์ ์ฐํจ, SSR ๋ฐ SSG ๋ชจ๋ ์ง์, API ๋ผ์ฐํธ, ๋ด์ฅ ์ด๋ฏธ์ง ์ต์ ํ, ๋ฐ์ด๋ ๊ฐ๋ฐ์ ๊ฒฝํ.
- ๋จ์ : ์ ์ฉ SSG๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
- Hugo: ์๋์ ์ฑ๋ฅ์ผ๋ก ์ ๋ช
ํ Go ๊ธฐ๋ฐ SSG์
๋๋ค. Hugo๋ ์ฝํ
์ธ ๊ฐ ๋ง์ ๋๊ท๋ชจ ์น์ฌ์ดํธ์ ํ์ํ ์ ํ์
๋๋ค.
- ์ฅ์ : ๋งค์ฐ ๋น ๋ฅธ ๋น๋ ์๊ฐ, ์ฌ์ฉํ๊ธฐ ์ฌ์, ๊ฐ๋ ฅํ ํ ํ๋ฆฟ ์ธ์ด.
- ๋จ์ : Gatsby ๋ฐ Next.js์ ๋นํด ์ ํ๋ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ.
- Eleventy (11ty): ๋ชจ๋ ํ
ํ๋ฆฟ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ ๊ฐ๋จํ๊ณ ์ ์ฐํ SSG์
๋๋ค. Eleventy๋ ๋์ ์์ค์ ์ฌ์ฉ์ ์ ์๊ฐ ํ์ํ ํ๋ก์ ํธ์ ํ๋ฅญํ ์ ํ์
๋๋ค.
- ์ฅ์ : ์ ์ฐํจ, ์ฌ๋ฌ ํ ํ๋ฆฟ ์ธ์ด ์ง์, ์ฌ์ฉํ๊ธฐ ์ฌ์, ๋ฐ์ด๋ ์ฑ๋ฅ.
- ๋จ์ : Gatsby ๋ฐ Next.js์ ๋นํด ์์ ์ปค๋ฎค๋ํฐ.
- Jekyll: ๋ธ๋ก๊ทธ ๋ฐ ๊ฐ๋จํ ์น์ฌ์ดํธ ๊ตฌ์ถ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ Ruby ๊ธฐ๋ฐ SSG์
๋๋ค. Jekyll์ ๋จ์์ฑ๊ณผ ์ฌ์ฉ ํธ์์ฑ์ผ๋ก ์ธํด ์ด๋ณด์์๊ฒ ์ธ๊ธฐ ์๋ ์ ํ์
๋๋ค.
- ์ฅ์ : ๊ฐ๋จํจ, ๋ฐฐ์ฐ๊ธฐ ์ฌ์, ๋ฌธ์ํ๊ฐ ์ ๋์ด ์์, ๋ธ๋ก๊ทธ์ ์ ํฉ.
- ๋จ์ : Hugo๋ณด๋ค ๋น๋ ์๊ฐ์ด ๋๋ฆฌ๊ณ , Eleventy๋ณด๋ค ์ ์ฐ์ฑ์ด ๋จ์ด์ง.
์์: ์๋ฅ๋ฅผ ํ๋งคํ๋ ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ํ์ฌ๋ฅผ ์์ํด ๋ณด์ญ์์ค. ๊ทธ๋ค์ ๋น ๋ฅด๊ณ ์์ ํ๋ฉฐ ๋๋์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋ ์น์ฌ์ดํธ๋ฅผ ์ํฉ๋๋ค. ๊ทธ๋ค์ ์ฑ๋ฅ ์ต์ ํ, ํ๋ถํ ์ ์ ์๊ฑฐ๋ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ(์: Shopify ํตํฉ) ๋ฐ ๋ณต์กํ ์ ํ ์นดํ๋ก๊ทธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฅ๋ ฅ ๋๋ฌธ์ Gatsby๋ฅผ ์ ํํฉ๋๋ค. Gatsby ์ฌ์ดํธ๋ JAMstack ๋ฐฐํฌ์ ํนํ๋ CDN์ธ Netlify์ ๋ฐฐํฌ๋์ด ์น์ฌ์ดํธ๊ฐ ์ ์ธ๊ณ ๊ณ ๊ฐ์๊ฒ ํญ์ ๋น ๋ฅด๊ณ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์ํฌํ๋ก์ฐ์ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ ํตํฉํ๊ธฐ
SSG๋ฅผ ์ํฌํ๋ก์ฐ์ ํตํฉํ๋ ๋ฐ๋ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค:
- ํ๋ก์ ํธ ์ค์ : ์ ํํ SSG๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์๋ ์ผ๋ฐ์ ์ผ๋ก SSG์ ๋ช ๋ น์ค ์ธํฐํ์ด์ค(CLI)๋ฅผ ์ค์นํ๊ณ ์ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค.
- ๊ตฌ์ฑ: ํ๋ก์ ํธ์ ๊ตฌ์กฐ, ๋ฐ์ดํฐ ์์ค ๋ฐ ๋น๋ ์ค์ ์ ์ ์ํ๋๋ก SSG๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด ์์ ์๋ ์ข ์ข ๊ตฌ์ฑ ํ์ผ(์: gatsby-config.js, next.config.js, config.toml)์ ๋ง๋๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
- ์ฝํ ์ธ ์์ฑ: ๋งํฌ๋ค์ด, YAML, JSON ๋๋ ๊ธฐํ ์ง์๋๋ ํ์์ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ๋ง๋ญ๋๋ค. ์น์ฌ์ดํธ์ ์ํคํ ์ฒ๋ฅผ ๋ฐ์ํ๋ ๋ ผ๋ฆฌ์ ์ธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ก ์ฝํ ์ธ ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ํ ํ๋ฆฟ ์์ฑ: ํ์ด์ง์ ๋ ์ด์์๊ณผ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ํ ํ๋ฆฟ์ ๋ง๋ญ๋๋ค. SSG์ ํ ํ๋ฆฟ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ์ ๋ฐ์ดํฐ ์์ค์์ ๋์ ์ผ๋ก HTML์ ์์ฑํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ: SSG์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ธ๋ถ API ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ฌ๊ธฐ์๋ GraphQL(Gatsby์ ๊ฒฝ์ฐ) ๋๋ ๊ธฐํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ๋น๋ ํ๋ก์ธ์ค: SSG์ ๋น๋ ๋ช ๋ น์ ์คํํ์ฌ ์ ์ HTML, CSS ๋ฐ JavaScript ํ์ผ์ ์์ฑํฉ๋๋ค. ์ด ํ๋ก์ธ์ค์๋ ์ผ๋ฐ์ ์ผ๋ก ํ ํ๋ฆฟ ์ปดํ์ผ, ์์ฐ ์ฒ๋ฆฌ ๋ฐ ์ถ๋ ฅ ์ต์ ํ๊ฐ ํฌํจ๋ฉ๋๋ค.
- ๋ฐฐํฌ: ์์ฑ๋ ์ ์ ํ์ผ์ Netlify, Vercel ๋๋ AWS S3์ ๊ฐ์ CDN์ ๋ฐฐํฌํฉ๋๋ค. ์ ์ธ๊ณ ์ฃ์ง ์๋ฒ ๋คํธ์ํฌ์์ ํ์ผ์ ์ ๊ณตํ๋๋ก CDN์ ๊ตฌ์ฑํฉ๋๋ค.
์์: ์ ๋ฝ, ์์์ ๋ฐ ์๋ฉ๋ฆฌ์นด์ ์ง์ฌ๋ฅผ ๋ ๋ค๊ตญ์ ๊ธฐ์ ์ด JAMstack ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธ๋ก๋ฒ ์ฑ์ฉ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ค์ ์๋์ ๋๋์ ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฅ๋ ฅ ๋๋ฌธ์ Hugo๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ์น์ฌ์ดํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ฑ์ฉ ๊ณต๊ณ ๋ Contentful๊ณผ ๊ฐ์ ํค๋๋ฆฌ์ค CMS์ ์ ์ฅ๋๋ฉฐ ๋น๋ ํ๋ก์ธ์ค ์ค์ ๊ฐ์ ธ์ต๋๋ค. ์น์ฌ์ดํธ๋ ๋ชจ๋ ์ฃผ์ ์์ฅ์ ์ฃ์ง ์๋ฒ๋ฅผ ๊ฐ์ถ CDN์ ๋ฐฐํฌ๋์ด ์ ์ธ๊ณ ๊ตฌ์ง์์๊ฒ ๋น ๋ฅด๊ณ ๋ฐ์์ด ๋น ๋ฅธ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
ํค๋๋ฆฌ์ค CMS์ ํจ๊ป ์์ ํ๊ธฐ
ํค๋๋ฆฌ์ค ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (CMS)์ ๋ฏธ๋ฆฌ ์ ์๋ ํ๋ก ํธ์๋ ํ๋ ์ ํ ์ด์ ๋ ์ด์ด ์์ด ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐฑ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ ์ ์น์ฌ์ดํธ์ ํ๋ก ํธ์๋์์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ํ ๋ ํฐ ์ ์ฐ์ฑ๊ณผ ์ ์ด๊ถ์ ๊ฐ์ง ์ ์์ต๋๋ค.
ํค๋๋ฆฌ์ค CMS๋ฅผ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์ ํตํฉํ๋ ๊ฒ์ JAMstack ์ํคํ ์ฒ์์ ์ผ๋ฐ์ ์ธ ํจํด์ ๋๋ค. ํค๋๋ฆฌ์ค CMS๋ SSG์ ๋ฐ์ดํฐ ์์ค ์ญํ ์ ํ์ฌ ์ ์ ์น์ฌ์ดํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ํตํด ์ฝํ ์ธ ํธ์ง์๋ ์ฝํ ์ธ ์์ฑ ๋ฐ ๊ด๋ฆฌ์ ์ง์คํ ์ ์๊ณ , ๊ฐ๋ฐ์๋ ํ๋ก ํธ์๋ ๊ตฌ์ถ ๋ฐ ์ต์ ํ์ ์ง์คํ ์ ์์ต๋๋ค.
์ธ๊ธฐ ์๋ ํค๋๋ฆฌ์ค CMS ์ต์
- Contentful: ์ ์ฐํ ์ฝํ ์ธ ๋ชจ๋ธ๋ง ์์คํ ๊ณผ ๊ฐ๋ ฅํ API๋ฅผ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ ํค๋๋ฆฌ์ค CMS์ ๋๋ค.
- Strapi: Node.js๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์คํ ์์ค ํค๋๋ฆฌ์ค CMS๋ก, ์ฝํ ์ธ API ๋ฐ ๊ด๋ฆฌ์ ํจ๋์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
- Sanity: ์ค์๊ฐ ํ์ ํธ์ง ํ๊ฒฝ๊ณผ ๊ฐ๋ ฅํ GraphQL API๋ฅผ ์ ๊ณตํ๋ ํค๋๋ฆฌ์ค CMS์ ๋๋ค.
- Netlify CMS: ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์ ํจ๊ป ์ฌ์ฉํ๊ณ Netlify์ ๋ฐฐํฌํ๋๋ก ์ค๊ณ๋ ์คํ ์์ค ํค๋๋ฆฌ์ค CMS์ ๋๋ค.
- WordPress (ํค๋๋ฆฌ์ค): WordPress๋ REST API ๋๋ GraphQL์ ํตํด ์ฝํ ์ธ ๋ฅผ ๋ ธ์ถํ์ฌ ํค๋๋ฆฌ์ค CMS๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์: ๊ธ๋ก๋ฒ ๋ด์ค ๊ธฐ๊ด์ ํค๋๋ฆฌ์ค CMS(Contentful)๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์ฌ ๋ฐ ๊ธฐํ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ๋ค์ Next.js๋ฅผ ์ฌ์ฉํ์ฌ Contentful์ API์์ ์ฝํ ์ธ ๋ฅผ ์๋นํ๋ ์ ์ ์น์ฌ์ดํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ํธ์ง์๋ ์ฝํ ์ธ ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ณ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ฐ์๋ ์ ์ธ๊ณ ๋ ์์๊ฒ ํ๋ฅญํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ง์คํ ์ ์์ต๋๋ค. ์ฌ์ดํธ๋ ์ต์ ์ ์ฑ๋ฅ์ ์ํด Vercel์ ๋ฐฐํฌ๋ฉ๋๋ค.
๊ณ ๊ธ ์ต์ ํ ๊ธฐ์
์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋นํ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํ์ง๋ง JAMstack ์น์ฌ์ดํธ์ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ๋์ฑ ํฅ์์ํฌ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ ์ด ์์ต๋๋ค.
- ์ด๋ฏธ์ง ์ต์ ํ: ์ด๋ฏธ์ง๋ฅผ ์์ถํ๊ณ ์ ์ ํ ํฌ๊ธฐ๋ก ์กฐ์ ํ๋ฉฐ WebP์ ๊ฐ์ ์ต์ ์ด๋ฏธ์ง ํ์์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํฉ๋๋ค.
- ์ฝ๋ ๋ถํ : JavaScript ์ฝ๋๋ฅผ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋ถํ ํ์ฌ ์น์ฌ์ดํธ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ ๋๋ค.
- ์ง์ฐ ๋ก๋ฉ: ๋ทฐํฌํธ์ ํ์๋ ๋๋ง ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์์ฐ์ ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ๊ณ ๋์ญํญ ์๋น๋ฅผ ์ค์ ๋๋ค.
- ์บ์ฑ: ๋ธ๋ผ์ฐ์ ์บ์ฑ ๋ฐ CDN ์บ์ฑ์ ํ์ฉํ์ฌ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค.
- ์ถ์: HTML, CSS ๋ฐ JavaScript ์ฝ๋๋ฅผ ์ถ์ํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํฉ๋๋ค.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN): CDN์ ํ์ฉํ์ฌ ์ ์ ์์ฐ์ ๊ธ๋ก๋ฒ ์๋ฒ ๋คํธ์ํฌ์ ๋ถ์ฐ์์ผ ์ ์ธ๊ณ ์ฌ์ฉ์์ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ํ๋ฆฌ๋ก๋ฉ: <link rel="preload"> ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง์ ์ด๊ธฐ ๋ ๋๋ง์ ํ์ํ ์ค์ ์์ฐ์ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค.
- ์๋น์ค ์์ปค: ์๋น์ค ์์ปค๋ฅผ ๊ตฌํํ์ฌ ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ณ ํ์ ๋ฐฉ๋ฌธ ์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์์: ๊ธ๋ก๋ฒ ์ฌํ์ฌ๋ Gatsby๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ์ ์ง์ ์ฌํ ํจํค์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ ์ ์น์ฌ์ดํธ๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ค์ ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ถํ๊ณ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ Gatsby ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํฉ๋๋ค. ๋ํ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ์ฌ JavaScript ์ฝ๋๋ฅผ ๋ ์์ ์ฒญํฌ๋ก ๋๋๊ณ ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํ์ฉํ์ฌ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค. ์น์ฌ์ดํธ๋ ๋ชจ๋ ์ฃผ์ ์์ฅ์ ์ฃ์ง ์๋ฒ๋ฅผ ๊ฐ์ถ CDN์ ๋ฐฐํฌ๋์ด ์ ์ธ๊ณ ์ฌํ๊ฐ์๊ฒ ๋น ๋ฅด๊ณ ๋ฐ์์ด ๋น ๋ฅธ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
๋ณด์ ๊ณ ๋ ค ์ฌํญ
JAMstack ์ํคํ ์ฒ๋ ๊ณต๊ฒฉ ํ๋ฉด์ ์ด ์ค์ด๋ค์ด ๋ณธ์ง์ ์ธ ๋ณด์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์น์ฌ์ดํธ์ ๋ณด์์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์์ ํ API ํค: API ํค๋ฅผ ๋ณดํธํ๊ณ ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋์ ๋ ธ์ถํ์ง ๋ง์ญ์์ค. ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ญ์์ค.
- ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ: ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฒ์ฆํ์ฌ ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๋ฐ ๊ธฐํ ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ์ญ์์ค.
- HTTPS: ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ชจ๋ ํต์ ์ ์ํธํํ๊ธฐ ์ํด ์น์ฌ์ดํธ๊ฐ HTTPS๋ฅผ ํตํด ์ ๊ณต๋๋์ง ํ์ธํ์ญ์์ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ๋ณด์ ์ทจ์ฝ์ ์ ํจ์นํ๊ธฐ ์ํด ์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ์ญ์์ค.
- ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP): ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)์ ๊ตฌํํ์ฌ ์น์ฌ์ดํธ์์ ๋ก๋ํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ณ XSS ๊ณต๊ฒฉ์ ์ํ์ ์ํํ์ญ์์ค.
- ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ: ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ์ํํ์ฌ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ์ญ์์ค.
์์: ๊ธ๋ก๋ฒ ๊ธ์ต ์๋น์ค ํ์ฌ๋ JAMstack ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ผํ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํฉ๋๋ค. ๊ทธ๋ค์ API ํค๋ฅผ ์ ์คํ๊ฒ ๋ณดํธํ๊ณ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ํ ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)์ ๊ตฌํํฉ๋๋ค. ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ์ํํ์ฌ ์น์ฌ์ดํธ๊ฐ ์์ ํ๊ณ ์ ๊ณ ๊ท์ ์ ์ค์ํ๋์ง ํ์ธํฉ๋๋ค.
JAMstack๊ณผ SSG์ ๋ฏธ๋
JAMstack ์ํคํ ์ฒ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๊ณ ์์ผ๋ฉฐ, ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ๋ ํ๋ ์น ๊ฐ๋ฐ์์ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ๊ณ ์์ต๋๋ค. ์น ๊ฐ๋ฐ์ด ๋์ฑ ๋ถ๋ฆฌ๋๊ณ API ์ค์ฌ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๊ณ์ ์ ํ๋จ์ ๋ฐ๋ผ SSG๋ ๋น ๋ฅด๊ณ ์์ ํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์น์ฌ์ดํธ ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์ฑ ํ์์ ์ด ๋ ๊ฒ์ ๋๋ค.
JAMstack ๋ฐ SSG์ ๋ฏธ๋ ๋ํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋์ฑ ์ง๋ณด๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ: SSG๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ์ ๊ณ์ ๊ฐ์ ํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ ๋์ ๋ฒ์์ ๋ฐ์ดํฐ ์์ค์ ์ฝ๊ฒ ํตํฉํ ์ ์๋๋ก ํ ๊ฒ์ ๋๋ค.
- ๊ฐ์ ๋ ์ฆ๋ถ ๋น๋: ์ฆ๋ถ ๋น๋๋ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด ๋์ด ๋๊ท๋ชจ ์น์ฌ์ดํธ์ ๋น๋ ์๊ฐ์ ์ค์ด๊ณ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํฌ ๊ฒ์ ๋๋ค.
- ํค๋๋ฆฌ์ค CMS์์ ํตํฉ ๊ฐํ: SSG๋ ํค๋๋ฆฌ์ค CMS์ ๋์ฑ ๊ธด๋ฐํ๊ฒ ํตํฉ๋์ด ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ณ ์น์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๊ธฐ๊ฐ ๋ ์ฌ์์ง ๊ฒ์ ๋๋ค.
- ๋์ฑ ์ ๊ตํ ํ ํ๋ฆฟ ์ธ์ด: ํ ํ๋ฆฟ ์ธ์ด๋ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํด์ ธ ๊ฐ๋ฐ์๊ฐ ๋ ๋ณต์กํ๊ณ ๋์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
- WebAssembly ์ฑํ ์ฆ๊ฐ: WebAssembly๋ SSG์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋ณต์กํ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ธก ๋ ๋๋ง๊ณผ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ๋ฅผ JAMstack ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ํตํฉํ๋ ๊ฒ์ ์ฑ๋ฅ, ๋ณด์, ํ์ฅ์ฑ ๋ฐ ๊ฐ๋ฐ์ ๊ฒฝํ ์ธก๋ฉด์์ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ SSG๋ฅผ ์ ์คํ๊ฒ ์ ํํ๊ณ ์ํฌํ๋ก์ฐ์ ํตํฉํ๋ฉฐ ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ ์ ๊ตฌํํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ธ๊ณ์ ์์ค์ ์น์ฌ์ดํธ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. JAMstack ์ํ๊ณ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ต์ ๋ํฅ๊ณผ ๊ธฐ์ ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ฑ๊ณต์ ํต์ฌ์ด ๋ ๊ฒ์ ๋๋ค.